Kafenio.pssSetup = function() {
	Kafenio.pss = $('#pss');
	Kafenio.anazitisiInput = $('input[name="anazitisi"]');
	Kafenio.sizitisiInput = $('input[name="sizitisi"]');
	Kafenio.prosklisi = $('#pssProsklisi');
	Kafenio.anazitisi = $('#pssAnazitisi');
	Kafenio.sizitisi = $('#pssSizitisi');

	$('#pssTitlosAnazitisi,#pssTitlosSizitisi').
	append($('<div>').addClass('pssAfxomiosiPanel').
	append($('<div>').addClass('pssTitlosBox').css({
		display: 'none',
		margin: 0,
	}).
	append($('<img>').addClass('pssIcon').attr({
		src: Client.server + 'ikona/misc/afxomiosi.png',
	})).

	// Η διαδικασία της αυξομείωσης περιοχών ξεκινάει με mousedown. Κατόπιν ο χρήστης
	// σέρνει τον δείκτη πάνω ή κάτω και η περιοχή αυξάνεται ή μειώνεται εις βάρος των
	// άλλων δύο περιοχών.

	on('mousedown', function(e) {
		var pliktro, y0, pH, aH, sH, cursor;

		if (e.which != 1) return;
		e.preventDefault();
		e.stopPropagation();
		if (Kafenio.pssAfxomiosi) return;

		cursor = $(document.body).add(this).css('cursor', 'move');
		$(document.body).add(this).css('cursor', 'move');
		pliktro = $(this).find('.pssIcon');
		y0 = e.pageY;
		pH = Kafenio.prosklisi.innerHeight();
		aH = Kafenio.anazitisi.innerHeight();
		sH = Kafenio.sizitisi.innerHeight();

		// Η ιδιότητα "pssAfxomiosi" δείχνει ποια περιοχή αυξομειώνεται.

		Kafenio.pssAfxomiosi = $(this).parents('.pssTitlos').attr('id');

		$(document).

		// Κατά την κίνηση του δείκτη εξετάζουμε αν ο δείκτης μετακινήθηκε προς τα πάνω,
		// οπότε έχουμε αύξηση περιοχής, ή προς τα κάτω, οπότε έχουμε μείωση περιοχής.

		on('mousemove', function(e) {
			var dy = e.pageY - y0;

			e.stopPropagation();
			if (!Kafenio.pssAfxomiosi) return;

			if (dy < 0) Kafenio.pssAfxisi(pliktro, -dy, pH, aH, sH);
			else if (dy > 0) Kafenio.pssMiosi(pliktro, dy, pH, aH, sH);
			else Kafenio.pssEpanafora(pliktro, pH, aH, sH);
		}).

		// Η διαδικασία της αυξομείωσης περιοχών σταματά με mouseup.

		on('mouseup', function(e) {
			var panel;

			e.stopPropagation();
			$(document).off('mousemove mouseup');
			cursor.css('cursor', '');
			delete Kafenio.pssAfxomiosi;
			pliktro.attr('src', Client.server + 'ikona/misc/afxomiosi.png');
			Kafenio.pssEnotitaFix();

			panel = pliktro.parents('.pssAfxomiosiPanel');
			panel.trigger('mouseout');
		});
	})).

	// Με την είσοδο του δείκτη στην περιοχή του πάνελ αυξομείωσης κάνουμε
	// εμφανές το κουτί που περιέχει το πλήκτρο αυξομείωσης περιοχής.

	on('mouseenter', function(e) {
		e.stopPropagation();
		$(this).children('.pssTitlosBox').finish().css('display', 'inline-block')
	}).

	// Με την έξοδο του δείκτη από την περιοχή του πάνελ αυξομείωσης αποκρύπτουμε
	// το πλήκτρο αυξομείωσης περιοχής.

	on('mouseleave', function(e) {
		e.stopPropagation();
		$(this).children('.pssTitlosBox').finish().fadeOut(100);
	}));

	$('.pssTitlos').
	on('mousedown', function(e) {
		var e1;

		if (e.which != 1) return;
		e.preventDefault();
		e.stopPropagation();
		e1 = $.Event(e.type);
		e1.pageY = e.pageY;
		e1.which = e.which;
		$(this).find('.pssAfxomiosiPanel').trigger('mouseenter').
		find('.pssIcon').trigger('mouseenter').trigger(e1);
	});

	$('.pssTitlosBox').children('img').
	on('mouseenter', function(e) {
		$(this).parents('.pssTitlosBox').addClass('pssTitlosBoxCandi');
	}).
	on('mouseleave', function(e) {
		$(this).parents('.pssTitlosBox').removeClass('pssTitlosBoxCandi');
	});

	$('.pssTitlosBox').
	on('mousedown', function(e) {
		var panel = $(this).parents('.pssAfxomiosiPanel');
		if (!panel.length) return e.stopPropagation();
	});

	Kafenio.pssInputSetup();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kafenio.pssAfxisi = function(pliktro, dy, prosklisiH, anazitisiH, sizitisiH) {
	var h, afxisi, afxisiH, miosi, miosiH, miosi2 = null, miosi2H, dy2 = 0;

	pliktro.attr('src', Client.server + 'ikona/misc/afxomiosiAfxisi.png');
	switch (Kafenio.pssAfxomiosi) {
	case 'pssTitlosAnazitisi':
		afxisi = Kafenio.anazitisi;
		afxisiH = anazitisiH;
		miosi = Kafenio.prosklisi;
		miosiH = prosklisiH;
		break;
	default:
		afxisi = Kafenio.sizitisi;
		afxisiH = sizitisiH;
		miosi = Kafenio.anazitisi;
		miosiH = anazitisiH;
		miosi2 = Kafenio.prosklisi;
		miosi2H = prosklisiH;
		break;
	}

	if (dy > miosiH) {
		dy2 = dy - miosiH;
		dy = miosiH;
	}

	h = (miosiH - dy) + 'px';
	miosi.css({
		height: h,
		maxHeight: h,
	});

	if (dy2 && miosi2) {
		if (dy2 > miosi2H) dy2 = miosi2H;
		h = miosi2H - dy2;
		h += 'px';
		miosi2.css({
			height: h,
			maxHeight: h,
		});
		miosi2 = null;
		h = afxisiH + miosiH + dy2;
	}
	else {
		h = afxisiH + dy;
	}

	if (miosi2) {
		miosi2H += 'px';
		miosi2.css({
			height: miosi2H,
			maxHeight: miosi2H,
		});
	}

	h += 'px';
	afxisi.css({
		maxHeight: h,
		height: h,
	});
}

Kafenio.pssMiosi = function(pliktro, dy, prosklisiH, anazitisiH, sizitisiH) {
	var h, miosi, miosiH, afxisi, afxisiH, miosi2 = null, miosi2H, dy2 = 0;

	pliktro.attr('src', Client.server + 'ikona/misc/afxomiosiMiosi.png');
	switch (Kafenio.pssAfxomiosi) {
	case 'pssTitlosAnazitisi':
		miosi = Kafenio.anazitisi;
		miosiH = anazitisiH;
		afxisi = Kafenio.prosklisi;
		afxisiH = prosklisiH;
		miosi2 = Kafenio.sizitisi;
		miosi2H = sizitisiH;
		break;
	default:
		miosi = Kafenio.sizitisi;
		miosiH = sizitisiH;
		afxisi = Kafenio.anazitisi;
		afxisiH = anazitisiH;
		break;
	}

	if (dy > miosiH) {
		dy2 = dy - miosiH;
		dy = miosiH;
	}

	h = (miosiH - dy) + 'px';
	miosi.css({
		height: h,
		maxHeight: h,
	});

	if (dy2 && miosi2) {
		if (dy2 > miosi2H) dy2 = miosi2H;
		h = miosi2H - dy2;
		h += 'px';
		miosi2.css({
			height: h,
			maxHeight: h,
		});
		miosi2 = null;
		h = afxisiH + miosiH + dy2;
	}
	else {
		h = afxisiH + dy;
	}

	if (miosi2) {
		miosi2H += 'px';
		miosi2.css({
			height: miosi2H,
			maxHeight: miosi2H,
		});
	}

	h += 'px';
	afxisi.css({
		maxHeight: h,
		height: h,
	});
}

Kafenio.pssEpanafora = function(pliktro, prosklisiH, anazitisiH, sizitisiH) {
	pliktro.attr('src', Client.server + 'ikona/misc/afxomiosi.png');

	prosklisiH += 'px';
	Kafenio.prosklisi.css({
		height: prosklisiH,
		maxHeight: prosklisiH,
	});

	anazitisiH += 'px';
	Kafenio.anazitisi.css({
		height: anazitisiH,
		maxHeight: anazitisiH,
	});

	sizitisiH += 'px';
	Kafenio.sizitisi.css({
		height: sizitisiH,
		maxHeight: sizitisiH,
	});
}

Kafenio.pssEnotitaSetup = function() {
	var h, h1, bh;

	h = Kafenio.pss.innerHeight();
	if (Kafenio.pssEnotitaSetupH == h) return;

	Kafenio.pssEnotitaSetupH = h;
	bh = $('#pssProsklisi').outerHeight() - $('#pssProsklisi').innerHeight();

	// Οι τίτλοι έχουν padding 2px πάνω και 2px κάτω, σύνολο 4px
	// και κάθε ενότητα έχει border 1px πάνω, συνεπώς έχουμε ένα
	// offset 5px για κάθε ενότητα.

	h -= 3 * $('.pssTitlos').outerHeight();
	h -= 3 * bh;
	if (h < 0) h = 0;
	h1 = h / 3;

	$('.pssEnotita').css({
		height: h1 + 'px',
		maxHeight: h1 + 'px',
	});
}

Kafenio.sizitisiPagoma = function(e, img) {
	Client.stopProp(e);
	if (Kafenio.sizitisi.data('pagomeno')) {
		Kafenio.sizitisi.removeData('pagomeno').removeClass('pssPagomeno');
		img.attr({
			src: Client.server + 'ikona/pss/pagoma.png',
			title: 'Πάγωμα κειμένου',
		});
	}
	else {
		Kafenio.sizitisi.data('pagomeno', 1).addClass('pssPagomeno');
		img.attr({
			src: Client.server + 'ikona/pss/xepagoma.png',
			title: 'Ρολάρισμα κειμένου',
		});
	}
	Kafenio.trexonInputFocus();
}

Kafenio.pssEnotitaFix = function() {
	var h, h1, bh, pH, aH, sH, alagi, alagiH;

	h = Kafenio.pss.innerHeight();
	bh = $('#pssProsklisi').outerHeight() - $('#pssProsklisi').innerHeight();

	h -= 3 * $('.pssTitlos').outerHeight();
	h -= 3 * bh;
	if (h < 0) return $('.pssEnotita').css({
		height: 0,
		maxHeight: 0,
	});

	pH = Kafenio.prosklisi.innerHeight();
	aH = Kafenio.anazitisi.innerHeight();
	sH = Kafenio.sizitisi.innerHeight();
	h -= pH + aH + sH;

	alagi = Kafenio.prosklisi;
	alagiH = pH;

	if (aH > alagiH) {
		alagi = Kafenio.anazitisi;
		alagiH = aH;
	}

	if (sH > alagiH) {
		alagi = Kafenio.sizitisi;
		alagiH = sH;
	}

	h += alagiH;
	if (h < 0) h = 0;
	h += 'px';
	alagi.css({
		height: h,
		maxHeight: h,
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kafenio.pssInputWidthSetup = function() {
	var w;

	w = parseInt($('#pss').outerWidth() * 0.5);
	Kafenio.sizitisiInput.css('width', w + 'px');
	if (w > 300) w = 300;
	Kafenio.anazitisiInput.css('width', w + 'px');
}

Kafenio.pssInputSetup = function() {
	Kafenio.pssInputWidthSetup();

	// Η ιδιότητα "trexonInput" δείχνει ποιο είναι το τρέχον input field στην
	// περιοχή pss.

	if (!Kafenio.trexonInput) Kafenio.trexonInput = Kafenio.sizitisiInput;
	Kafenio.trexonInput.focus();

	// Κάθε φορά που κάνουμε focus σε ένα από τα input fields της περιοχής pss
	// θέτουμε ως τρέχον input field το συγκεκριμένο πεδίο.

	$('.pssInput').
	on('focus', function() {
		Kafenio.trexonInput = $(this);
	});

	$(document).on('click', function(e) {
		e.stopPropagation();
		Kafenio.trexonInputFocus();
	});
$('.trapezi,.rebelos,.pssEnotita').on('click', function(e) {
	e.stopPropagation();
});
}

// Η function "trexonInputFocus" επαναφέρει το focus στο τρέχον input field της περιοχής
// pss. Μπορούσαμε να κάνουμε απευθείας focus, αλλά αυτό παρουσιάζει προβλήματα όταν το
// πεδίο βρίσκεται εκτός παραθύρου.

Kafenio.trexonInputFocus = function() {
	var telaro, maxL;

	telaro = $('#telaro');
	maxL = telaro.offset().left + telaro.outerWidth() - 5;
	if (Kafenio.trexonInput.offset().left > maxL) return;

	Kafenio.trexonInput.focus();
}
